/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gestorvideoclub.jdbc;

import gestorvideoclub.Producto;
import gestorvideoclub.Ubicacion;
import java.util.List;
import java.sql.*;
import java.util.ArrayList;
/**
 *
 * @author JAVA
 */
public class UbicacionJDBC {
    
    private static int tam=20;

    public static List<Ubicacion> listadoUbicacionBBDD(){
        int id, fila,columna,ocupado;
        boolean ocup;
        List<Ubicacion> lista = new ArrayList();
        String sql = "select * from ubicaciones";

        Connection con = null;
        try{
            con = AccesoDatos.getConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            //guardamos lista de ubicaciones de la BBDD
            while(rs.next()){
                id = rs.getInt("ubicaciones.Id");
                fila = rs.getInt("ubicaciones.fila");
                columna = rs.getInt("ubicaciones.columna");
                ocupado= rs.getInt("ubicaciones.ocupado");
                if(ocupado==1)
                    ocup=true;
                else
                    ocup=false;
                Ubicacion aux = new Ubicacion(fila, columna, ocup);
                aux.setId(id);
                lista.add(aux);
            }
            AccesoDatos.cerrarConexion(con);
        }
        catch(Exception e){
            System.out.println("Error al ejecutar consulta ubicacion "+e.getMessage());
        }
        return lista;
    }
//Busca Ubicacion libre. si la encuentra devuelve el IdUbicacion, sino devuelve -1
    public static int BuscaIdUbicacionLibre(){
        List<Ubicacion> listaU=listadoUbicacionBBDD();
        int idT=-1, i=0;
        boolean enc=false;
        while(i<listaU.size() && !enc){
            Ubicacion aux = listaU.get(i);
            if(!aux.isOcupado())
            {
                idT=listaU.get(i).getId();
                enc=true;
            }
            i++;
        }
        return idT;
    }

    public static Ubicacion devuelveUbicacion(int idUbicacion){
        int id, fila,columna,ocupado;
        boolean ocup;
        Ubicacion aux = new Ubicacion();
        List<Ubicacion> lista = new ArrayList();
        String sql = "select * from ubicaciones where  ubicaciones.Id="+idUbicacion;

        Connection con = null;
        try{
            con = AccesoDatos.getConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            //guardamos ubicacion de la BBDD
            while(rs.next()){
                aux.setId(rs.getInt("ubicaciones.Id"));
                aux.setFila(rs.getInt("ubicaciones.fila"));
                aux.setColumna(rs.getInt("ubicaciones.columna"));
                ocupado= rs.getInt("ubicaciones.ocupado");
                //pasamos de entero a booleano
                if(ocupado==1)
                    ocup=true;
                else
                    ocup=false;
                
                aux.setOcupado(ocup);
            }
            AccesoDatos.cerrarConexion(con);
        }
        catch(Exception e){
            System.out.println("Error al ejecutar consulta ubicacion "+e.getMessage());
        }
        return aux;
    }

    public static void modificaUbicacion(Ubicacion ubicacion){
        int ocupado;
        String  sql;
        if(ubicacion.isOcupado())
        {
            ocupado=1;
        }
        else
        {
            ocupado=0;
        }
        Connection con = null;
        sql = "update ubicaciones set ocupado='"+ocupado+"' where ubicaciones.Id=" + ubicacion.getId();
        Statement st = null;
        try {
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            st.executeUpdate(sql);
            st.close();
            AccesoDatos.cerrarConexion(con);
        } catch (Exception e) {
            System.out.println("Error al modificar ubicacion Pelicula " + e.getMessage());
        }
    }        
        
   
    public static void insertaUbicacion(Ubicacion ub){
            Connection con = null;
            Statement st = null;
            //en la BBDD guardamos 1, para que este ocupado
            String sql = "UPDATE ubicaciones SET ocupado=1 where ubicaciones.Id="+ub.getId();
            try{
                con = AccesoDatos.getConexion();
                st = con.createStatement();
                st.executeUpdate(sql);
                st.close();
            }
            catch(Exception e){
                System.out.println("Error al insertar un nueva ubicacion "+e.getMessage());
            }
            finally{
                AccesoDatos.cerrarConexion(con);
            }
    }

    public static Ubicacion obtenerUbicacionPorId(int idUbicacion)
    {
        Ubicacion ubicacion = null;
        String sql = "select * from ubicaciones where Id ="+idUbicacion;

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            while(rs.next()){
                ubicacion = new Ubicacion();
                ubicacion.setId(rs.getInt("Id"));
                ubicacion.setFila(rs.getInt("fila"));
                ubicacion.setColumna(rs.getInt("columna"));
                //pasamos de entero a booleano
                if(rs.getInt("ocupado")==0){
                    ubicacion.setOcupado(false);
                }
                else{
                    ubicacion.setOcupado(true);
                }
            }
        }
        catch(Exception e){
            System.out.println("Error al obtener la ubicacion por su identificador "+e.getMessage());
        }
        return ubicacion;
    }

    /*
     * metodo que devuelve el numero de productos que estan en el cajero
     */
    public static int consultaUbicacionesCajero(){
   int aux = 0;
        String sql = "select COUNT(Id) AS tamano from ubicaciones where ubicaciones.ocupado=1";
        Connection con = null;
        try {
            con = AccesoDatos.getConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                aux = rs.getInt("tamano");//nos guarda el entero que nos devuelve la consulta
            }
            AccesoDatos.cerrarConexion(con);
        } catch (Exception e) {
            System.out.println("Error al comprobar codigo de Producto " + e.getMessage());
        }
        //le restamos a aux 1 ubicacion,correspondiente a los productos que estan en tienda
        return aux-1;
    }
    
    /*
     * metodo que devuelve el numero de productos que estan en el cajero
     */
    public static int consultaUbicacionesTienda(){
   int aux = 0;
        String sql = "select COUNT(titulo) AS tamano from productos,ubicaciones where ubicaciones.Id=productos.id_ubicacion AND ubicaciones.Id = 1";
        Connection con = null;
        try {
            con = AccesoDatos.getConexion();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(sql);
            while (rs.next()) {
                aux = rs.getInt("tamano");//nos guarda el entero que nos devuelve la consulta
            }
            AccesoDatos.cerrarConexion(con);
        } catch (Exception e) {
            System.out.println("Error al comprobar codigo de Producto " + e.getMessage());
        }
        return aux;
    }
    
    
}
